﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace QLKS
{
    public partial class fCapNhatKhachHang : Form
    {
        public fCapNhatKhachHang()
        {
            InitializeComponent();
            _timer.Tick += new EventHandler(timer_Tick);
            _timer.Interval = 1000;
            _timer.Enabled = true;
            _timer.Start();
        }

        #region Variable
        Timer _timer = new Timer();//cập nhật trạng thái đăng nhập của người dùng
        private bool _ktdangnhap;//biến tạm kiểm tra trạng thái đăng nhập
        private int soluongthem = -1;
        private List<string> makh_dathem = new List<string>();
        #endregion
        #region Properties
        public int Soluongthem
        {
            get { return soluongthem; }
            set { soluongthem = value; }
        }
        public List<string> Makh_dathem
        {
            get { return makh_dathem; }
            set { makh_dathem = value; }
        }
        #endregion

        private void cbloaikhach_itemUpdate()
        {
            try
            {
                LayDuLieu dl = new LayDuLieu();
                SqlDataReader dr = dl.LayTruongDuLieu("SELECT TenLK FROM LOAIKHACH");
                cbloaikhach.Items.Clear();
                while (dr.Read())
                {
                    cbloaikhach.Items.Add(dr.GetString(0));
                }
                KetNoi.NgatKetNoi();
            }
            catch { }
            cbloaikhach.SelectedIndex = 0;
        }

        /// <summary>
        /// Kiểm tra người dùng đăng nhập chưa,
        /// nếu đăng nhập rồi thì cho phép thao tác,
        /// nếu chưa thì không cho phép thao tác
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void fCapNhatKhachHang_Load(object sender, EventArgs e)
        {
            tbmakh.Clear();
            tbtenkh.Clear();
            tbcmnd.Clear();
            tbdiachi.Clear();
            label6.Text = "";
            if (MainForm.ktdangnhap == true) //người dùng đã đăng nhập thì cho phép thực hiện các truy vấn
            {
                rbthem.Enabled = true;
                rbsua.Enabled = true;
                rbxoa.Enabled = true;
                tbmakh.Enabled = true;
                XuLyChung xlc = new XuLyChung(); //
                tbmakh.Enabled = true;                      // tự động thêm mã khách hàng theo thứ tự khi chọn thêm khách hàng
                tbmakh.Text = xlc.TuDongThemMa("KH", "SELECT MaKH FROM KHACHHANG");              //
                tbtenkh.Enabled = true;
                cbloaikhach.Enabled = true;
                label1.Enabled = true;
                label2.Enabled = true;
                label3.Enabled = true;
                label4.Enabled = true;
                label5.Enabled = true;
                cbloaikhach_itemUpdate();
                rbthem.Checked = true;
                btthem.Enabled = true;
                btxoa.Hide();
                btsua.Hide();
                if (soluongthem > 0)
                {
                    rbsua.Enabled = false;
                    rbxoa.Enabled = false;
                }
                else if (soluongthem == 0)
                {
                    rbsua.Enabled = false;
                    rbxoa.Enabled = false;
                    btthem.Enabled = false;
                }
                _ktdangnhap = MainForm.ktdangnhap;
            }
            else //ngược lại không cho thực hiện các truy vấn
            {
                rbthem.Enabled = false;
                rbsua.Enabled = false;
                rbxoa.Enabled = false;
                tbmakh.Enabled = false;
                tbtenkh.Enabled = false;
                cbloaikhach.Enabled = false;
                label1.Enabled = false;
                label2.Enabled = false;
                label3.Enabled = false;
                label4.Enabled = false;
                label5.Enabled = false;
                btthem.Enabled = false;
                btsua.Enabled = false;
                btxoa.Enabled = false;
                _ktdangnhap = MainForm.ktdangnhap;
            }
        }

        /// <summary>
        /// Form thực hiện chức năng thêm khách hàng
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void rbthem_CheckedChanged(object sender, EventArgs e)
        {
            XuLyChung xlc = new XuLyChung(); //
            tbmakh.Enabled = true;                      // tự động thêm mã khách hàng theo thứ tự khi chọn thêm khách hàng
            tbmakh.Text = xlc.TuDongThemMa("KH", "SELECT MaKH FROM KHACHHANG");              //
            tbtenkh.Enabled = true;
            tbtenkh.Clear();
            cbloaikhach.Enabled = true;
            tbcmnd.Enabled = true;
            tbcmnd.Clear();
            tbdiachi.Enabled = true;
            tbdiachi.Clear();
            btthem.Show();
            btsua.Hide();
            btxoa.Hide();
            tbtenkh.Focus();
        }

        /// <summary>
        /// Form thực hiện chức năng xóa khách hàng
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void rbxoa_CheckedChanged(object sender, EventArgs e)
        {
            tbmakh.Enabled = true;
            tbmakh.Clear();
            tbtenkh.Enabled = false;
            tbtenkh.Clear();
            cbloaikhach.Enabled = false;
            tbcmnd.Enabled = false;
            tbcmnd.Clear();
            tbdiachi.Enabled = false;
            tbdiachi.Clear();
            btthem.Hide();
            btsua.Hide();
            btxoa.Show();
            tbmakh.Focus();
        }

        /// <summary>
        /// Form thực hiện chức năng sửa khách hàng
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void rbsua_CheckedChanged(object sender, EventArgs e)
        {
            tbmakh.Enabled = true;
            tbmakh.Clear();
            tbtenkh.Enabled = true;
            tbtenkh.Clear();
            cbloaikhach.Enabled = true;
            tbcmnd.Enabled = true;
            tbcmnd.Clear();
            tbdiachi.Enabled = true;
            tbdiachi.Clear();
            btthem.Hide();
            btsua.Show();
            btxoa.Hide();
            tbmakh.Focus();
        }

        /// <summary>
        /// Kiểm tra sự hợp lệ của mã khách hàng và tự động điền thông tin khi người dùng cần sửa/xóa một khách hàng
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tbmakh_TextChanged(object sender, EventArgs e)
        {
            XuLyCapNhatKhachHang xlcnkh = new XuLyCapNhatKhachHang();
            if (rbthem.Checked == true)
            {
                label6.Text = xlcnkh.KiemTraMaKhachHang_Them(tbmakh.Text);
            }
            else if (rbxoa.Checked == true || rbsua.Checked == true)
            {
                tbtenkh.Clear();
                tbcmnd.Clear();
                tbdiachi.Clear();
                string temp = null;
                int i = 0;
                label6.Text = xlcnkh.KiemTraMaKhachHang_XoaSua(tbmakh.Text);
                try
                {
                    LayDuLieu dl = new LayDuLieu();
                    SqlDataReader dr1 = dl.LayTruongDuLieu("SELECT TenKH FROM KHACHHANG WHERE MaKH='" + tbmakh.Text + "'");
                    SqlDataReader dr2 = dl.LayTruongDuLieu("SELECT MaLK FROM KHACHHANG WHERE MaKH='" + tbmakh.Text + "'");
                    SqlDataReader dr3 = dl.LayTruongDuLieu("SELECT CMND FROM KHACHHANG WHERE MaKH='" + tbmakh.Text + "'");
                    SqlDataReader dr4 = dl.LayTruongDuLieu("SELECT DiaChi FROM KHACHHANG WHERE MaKH='" + tbmakh.Text + "'");
                    while (dr1.Read())
                    {
                        tbtenkh.Text = dr1.GetString(0);
                    }
                    while (dr2.Read())
                    {
                        temp = dr2.GetString(0);
                    }
                    while (i < cbloaikhach.Items.Count)
                    {
                        cbloaikhach.SelectedIndex = i;
                        if (String.Compare(cbloaikhach.SelectedItem.ToString(), xlcnkh.MaLoaiKhach_LoaiKhachHang(temp)) == 0)
                        {
                            break;
                        }
                        i++;
                    }
                    while (dr3.Read())
                    {
                        tbcmnd.Text = dr3.GetString(0);
                    }
                    while (dr4.Read())
                    {
                        tbdiachi.Text = dr4.GetString(0);
                    }
                    KetNoi.NgatKetNoi();
                }
                catch { }
            }
        }

        /// <summary>
        /// Kiểm tra khách hàng có tồn tại trong CSDL chưa
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tbcmnd_Leave(object sender, EventArgs e)
        {
            XuLyCapNhatKhachHang xlcnkh = new XuLyCapNhatKhachHang();
            string makh_temp = "";
            string malk_temp = "";
            string diachi_temp = "";
            try
            {
                LayDuLieu dl = new LayDuLieu();
                SqlDataReader dr1 = dl.LayTruongDuLieu("SELECT MaKH FROM KHACHHANG WHERE TenKH=N'" + tbtenkh.Text + "' AND CMND='" + tbcmnd.Text + "'");
                SqlDataReader dr2 = dl.LayTruongDuLieu("SELECT MaLK FROM KHACHHANG WHERE TenKH=N'" + tbtenkh.Text + "' AND CMND='" + tbcmnd.Text + "'");
                SqlDataReader dr3 = dl.LayTruongDuLieu("SELECT DiaChi FROM KHACHHANG WHERE TenKH=N'" + tbtenkh.Text + "' AND CMND='" + tbcmnd.Text + "'");
                while (dr1.Read())
                {
                    makh_temp = dr1.GetString(0);
                }
                while (dr2.Read())
                {
                    malk_temp = dr2.GetString(0);
                }
                while (dr3.Read())
                {
                    diachi_temp = dr3.GetString(0);
                }
                if (makh_temp != "")
                {
                    if (MessageBox.Show("Tên và CMND của khách hàng vừa nhập có thể trùng với khách hàng sau:\nMã khách hàng:\t" + makh_temp + "\nTên khách hàng:\t" + tbtenkh.Text + "\nMã loại khách:\t" + malk_temp + "\nCMND:\t\t" + tbcmnd.Text + "\nĐịa chỉ:\t\t" + diachi_temp + "\nBạn có muốn thêm thông tin khách hàng này với mã khách hàng mới không?", "Chú ý", MessageBoxButtons.YesNo) == DialogResult.No)
                    {
                        soluongthem--;
                        makh_dathem.Add(makh_temp);
                        fCapNhatKhachHang_Load(sender, e);
                        tbtenkh.Focus();
                    }
                }
                KetNoi.NgatKetNoi();
            }
            catch { }
        }

        /// <summary>
        /// Kiểm tra textbox makh, textbox tenkh, textbox cmnd là trống hay có ký tự
        /// </summary>
        /// <returns></returns>
        private bool KiemTra()
        {
            if (tbmakh.TextLength == 0 || tbtenkh.TextLength == 0 || tbcmnd.TextLength == 0)
            {
                return false;
            }
            else
                return true;
        }

        /// <summary>
        /// Cập nhật thông tin là thêm khách hàng trong CSDL
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btthem_Click(object sender, EventArgs e)
        {
            if (KiemTra() == true)
            {
                XuLyCapNhatKhachHang xltkh = new XuLyCapNhatKhachHang();
                if (xltkh.ThemKhachHang(tbmakh.Text, tbtenkh.Text, cbloaikhach.Text, tbcmnd.Text, tbdiachi.Text) == false)
                {
                    MessageBox.Show("Thêm khách hàng thất bại");
                }
                else
                {
                    MessageBox.Show("Thêm khách hàng thành công");
                    soluongthem--;
                    makh_dathem.Add(tbmakh.Text);
                }
                fCapNhatKhachHang_Load(sender, e);
                rbthem.Checked = true;
            }
            else
            {
                MessageBox.Show("Các thông tin về khách hàng không được bỏ trống", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbmakh.Focus();
            }
        }

        /// <summary>
        /// Cập nhật thông tin là xóa khách hàng trong CSDL
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btxoa_Click(object sender, EventArgs e)
        {
            if (KiemTra() == true)
            {
                XuLyCapNhatKhachHang xlxkh = new XuLyCapNhatKhachHang();
                if (xlxkh.XoaKhachHang(tbmakh.Text) == false)
                {
                    MessageBox.Show("Xóa khách hàng thất bại");
                }
                else
                {
                    MessageBox.Show("Xóa khách hàng thành công");
                }
                fCapNhatKhachHang_Load(sender, e);
                rbxoa.Checked = true;
            }
            else
            {
                MessageBox.Show("Các thông tin về khách hàng không được bỏ trống", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbmakh.Focus();
            }
        }

        /// <summary>
        /// Cập nhật thông tin là sửa khách hàng trong CSDL
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btsua_Click(object sender, EventArgs e)
        {
            if (KiemTra() == true)
            {
                XuLyCapNhatKhachHang xlskh = new XuLyCapNhatKhachHang();
                if (xlskh.SuaKhachHang(tbmakh.Text, tbtenkh.Text, cbloaikhach.Text, tbcmnd.Text, tbdiachi.Text) == false)
                {
                    MessageBox.Show("Sửa khách hàng thất bại");
                }
                else
                {
                    MessageBox.Show("Sửa khách hàng thành công");
                }
                fCapNhatKhachHang_Load(sender, e);
                rbsua.Checked = true;
            }
            else
            {
                MessageBox.Show("Các thông tin về khách hàng không được bỏ trống", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbmakh.Focus();
            }
        }

        /// <summary>
        /// Đóng form Cập nhật khách hàng
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void bthuy_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        /// <summary>
        /// cập nhật tình trạng đăng nhập của người dùng
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer_Tick(object sender, EventArgs e)
        {
            if (MainForm.ktdangnhap != _ktdangnhap)
            {
                fCapNhatKhachHang_Load(sender, e);
            }
        }

        /// <summary>
        /// Thực hiện chức năng tương ứng đang chọn
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void fCapNhatKhachHang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter && rbthem.Checked == true)
                btthem.PerformClick();
            else if (e.KeyCode == Keys.Enter && rbxoa.Checked == true)
                btxoa.PerformClick();
            else if (e.KeyCode == Keys.Enter && rbsua.Checked == true)
                btsua.PerformClick();
        }
    }
}
